package com.powernode.rules.config;

import org.kie.api.KieServices;
import org.kie.api.builder.KieBuilder;
import org.kie.api.builder.KieFileSystem;
import org.kie.api.builder.KieModule;
import org.kie.api.runtime.KieContainer;
import org.kie.api.runtime.KieSession;
import org.kie.internal.io.ResourceFactory;

/**
 * Drools规则引擎帮助类
 * 提供加载和初始化Drools规则的工具方法
 */
public class DroolsHelper {
    /**
     * 加载指定的Drools规则文件并创建KieSession会话
     * KieSession是Drools规则引擎的核心接口，用于执行规则
     *
     * @param drlStr DRL规则文件的路径（相对于类路径）
     * @return 创建好的KieSession对象，可以用于执行规则
     */
    public static KieSession loadForRule(String drlStr) {
        // 获取KieServices实例，这是Drools的核心服务入口
        KieServices kieServices = KieServices.Factory.get();

        // 创建KieFileSystem实例，用于管理规则资源
        KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
        // 将指定路径的规则文件写入KieFileSystem
        kieFileSystem.write(
                ResourceFactory.newClassPathResource(drlStr));

        // 创建KieBuilder实例，用于构建规则知识库
        KieBuilder kb = kieServices.newKieBuilder(kieFileSystem);
        // 构建所有规则资源
        kb.buildAll();

        // 获取构建后的KieModule
        KieModule kieModule = kb.getKieModule();
        // 创建KieContainer，用于加载和管理KieModule
        KieContainer kieContainer = kieServices.newKieContainer(kieModule.getReleaseId());
        // 创建并返回新的KieSession实例
        return kieContainer.newKieSession();
    }
}